﻿#define _CRT_SECURE_NO_WARNINGS 1

//45. 跳跃游戏 II
class Solution {
public:
    int jump(vector<int>& nums) {

        // 动态规划
        // int n = nums.size();
        // vector<int> dp(n, INT_MAX);
        // dp[0] = 0;
        // for(int i = 1; i < n; ++i)
        //     for(int j = 0; j < i; ++j)
        //         if(nums[j] + j >= i)
        //             dp[i] = min(dp[i], dp[j] + 1);
        // return dp[n - 1];

        int left = 0, right = 0, maxPos = 0, ret = 0, n = nums.size();
        while (left <= right)// 保险的写法，以防跳不到 n - 1 的位置
        {
            if (maxPos >= n - 1)// 先判断⼀下是否已经能跳到最后⼀个位置
            {
                return ret;
            }
            // 遍历当成层，更新下⼀层的最右端点 
            for (int i = left; i <= right; ++i)
            {
                maxPos = max(maxPos, nums[i] + i);
            }
            left = right + 1;
            right = maxPos;
            ++ret;
        }
        return -1;// 跳不到的情况

    }
};